--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / messageTimestampGrouping.js
Displaying Raw • Download
meshchatx/src/frontend/js/messageTimestampGrouping.js ee6fe7752180ee28562a9b965108612a268fae64 (ee6fe775) Text, 4.14 KB
T8b949e/** Gap after which the next message starts a new time cluster (ms). */
Tff7b72export Tff7b72const Te6edf3TIMESTAMP_CLUSTER_GAP_MS Tff7b72= T79c0ff5 Tff7b72* T79c0ff60 Tff7b72* T79c0ff1000Tb4b4b4;
T8b949e/**
* @param {unknown} datetimeString
* @returns {Date | null}
*/
Tff7b72export Tff7b72function Te6edf3parseMessageDateTb4b4b4(Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3dateString Tff7b72= Tffa657StringTb4b4b4(Te6edf3datetimeStringTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Z"Tb4b4b4) Tff7b72&& Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"+"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3dateString Tff7b72= Te6edf3dateStringTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff" "Tb4b4b4, Ta5d6ff"T"Tb4b4b4) Tff7b72+ Ta5d6ff"Z"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3date Tff7b72= Tff7b72new Tffa657DateTb4b4b4(Te6edf3dateStringTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657NumberTb4b4b4.Tffa657isNaNTb4b4b4(Te6edf3dateTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72? Tff7b72null Tff7b72: Te6edf3dateTb4b4b4;
Tb4b4b4}
T8b949e/**
* Local calendar day key for grouping.
* @param {Date} d
* @returns {string | null}
*/
Tff7b72export Tff7b72function Te6edf3calendarDayKeyFromDateTb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3d Tff7b72|| Tffa657NumberTb4b4b4.Tffa657isNaNTb4b4b4(Te6edf3dTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3y Tff7b72= Te6edf3dTb4b4b4.Te6edf3getFullYearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3m Tff7b72= Tffa657StringTb4b4b4(Te6edf3dTb4b4b4.Te6edf3getMonthTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3day Tff7b72= Tffa657StringTb4b4b4(Te6edf3dTb4b4b4.Te6edf3getDateTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3yTffd700}Ta5d6ff-Tffd700${Te6edf3mTffd700}Ta5d6ff-Tffd700${Te6edf3dayTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} group
* @returns {{ min: number, max: number }}
*/
Tff7b72export Tff7b72function Te6edf3displayGroupSortBoundsMsTb4b4b4(Te6edf3groupTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3group Tff7b72|| Tff7b72typeof Te6edf3group Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3minTff7b72: T79c0ff0Tb4b4b4, Te6edf3maxTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3groupTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"single"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3t Tff7b72= Te6edf3parseMessageDateTb4b4b4(Te6edf3groupTb4b4b4.Te6edf3chatItemTff7b72?Tb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3created_atTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4) Tff7b72?? T79c0ff0Tb4b4b4;
Tff7b72return Tb4b4b4{ Te6edf3minTff7b72: Te6edf3tTb4b4b4, Te6edf3maxTff7b72: Te6edf3t Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3groupTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"imageGroup" Tff7b72&& Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3groupTb4b4b4.Te6edf3itemsTb4b4b4) Tff7b72&& Te6edf3groupTb4b4b4.Te6edf3itemsTb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3minT Tff7b72= Tff7b72InfinityTb4b4b4;
Tff7b72let Te6edf3maxT Tff7b72= Tff7b72-Tff7b72InfinityTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3it Tff7b72of Te6edf3groupTb4b4b4.Te6edf3itemsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3t Tff7b72= Te6edf3parseMessageDateTb4b4b4(Te6edf3itTff7b72?Tb4b4b4.Te6edf3lxmf_messageTff7b72?Tb4b4b4.Te6edf3created_atTb4b4b4)Tff7b72?Tb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3t Tff7b72&& Tff7b72!Tffa657NumberTb4b4b4.Tffa657isNaNTb4b4b4(Te6edf3tTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3minT Tff7b72= Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(Te6edf3minTTb4b4b4, Te6edf3tTb4b4b4)Tb4b4b4;
Te6edf3maxT Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(Te6edf3maxTTb4b4b4, Te6edf3tTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3minT Tff7b72=== Tff7b72InfinityTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Te6edf3minTff7b72: T79c0ff0Tb4b4b4, Te6edf3maxTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3minTff7b72: Te6edf3minTTb4b4b4, Te6edf3maxTff7b72: Te6edf3maxT Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3minTff7b72: T79c0ff0Tb4b4b4, Te6edf3maxTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} group
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3displayGroupIsOutboundTb4b4b4(Te6edf3groupTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3groupTff7b72?Tb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"single"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72!Tff7b72!Te6edf3groupTb4b4b4.Te6edf3chatItemTff7b72?Tb4b4b4.Te6edf3is_outboundTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3groupTff7b72?Tb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"imageGroup" Tff7b72&& Te6edf3groupTb4b4b4.Te6edf3itemsTff7b72?Tb4b4b4.Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72!Tff7b72!Te6edf3groupTb4b4b4.Te6edf3itemsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3is_outboundTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
T8b949e/**
* Inserts date dividers and sets `showTimestamp` on each message row (true on the
* chronologically last message of each cluster, i.e. the bubble that should show the time).
* @param {unknown[]} groupsOldestFirst
* @param {{ groupingEnabled?: boolean }} [options]
* @returns {unknown[]}
*/
Tff7b72export Tff7b72function Te6edf3buildTimestampGroupedOldestFirstTb4b4b4(Te6edf3groupsOldestFirstTb4b4b4, Te6edf3options Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3groupingEnabled Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3groupingEnabled Tff7b72!== Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3groupsOldestFirstTff7b72?Tb4b4b4.Te6edf3lengthTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3onlyMsg Tff7b72= Te6edf3groupsOldestFirstTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3gTb4b4b4) Tb4b4b4=> Te6edf3g Tff7b72&& Tb4b4b4(Te6edf3gTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"single" Tff7b72|| Te6edf3gTb4b4b4.Te6edf3type Tff7b72=== Ta5d6ff"imageGroup"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3groupingEnabledTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3onlyMsgTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3gTb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3gTb4b4b4, Te6edf3showTimestampTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3showFlags Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3onlyMsgTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3g Tff7b72= Te6edf3onlyMsgTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3next Tff7b72= Te6edf3onlyMsgTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tff7b72let Te6edf3show Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3next Tff7b72&& Tff7b72!Te6edf3displayGroupIsOutboundTb4b4b4(Te6edf3gTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cb Tff7b72= Te6edf3displayGroupSortBoundsMsTb4b4b4(Te6edf3gTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3nb Tff7b72= Te6edf3displayGroupSortBoundsMsTb4b4b4(Te6edf3nextTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sameSide Tff7b72= Te6edf3displayGroupIsOutboundTb4b4b4(Te6edf3gTb4b4b4) Tff7b72=== Te6edf3displayGroupIsOutboundTb4b4b4(Te6edf3nextTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3gap Tff7b72= Te6edf3nbTb4b4b4.Te6edf3min Tff7b72- Te6edf3cbTb4b4b4.Te6edf3maxTb4b4b4;
Te6edf3show Tff7b72= Tff7b72!Te6edf3sameSide Tff7b72|| Te6edf3gap Tff7b72>= Te6edf3TIMESTAMP_CLUSTER_GAP_MS Tff7b72|| Te6edf3gap Tff7b72< T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3showFlagsTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3showTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72let Te6edf3prevDayKey Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3onlyMsgTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3g Tff7b72= Te6edf3onlyMsgTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3bounds Tff7b72= Te6edf3displayGroupSortBoundsMsTb4b4b4(Te6edf3gTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3dayKey Tff7b72= Te6edf3boundsTb4b4b4.Te6edf3min Tff7b72? Te6edf3calendarDayKeyFromDateTb4b4b4(Tff7b72new Tffa657DateTb4b4b4(Te6edf3boundsTb4b4b4.Te6edf3minTb4b4b4)Tb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3dayKey Tff7b72&& Te6edf3dayKey Tff7b72!== Te6edf3prevDayKeyTb4b4b4) Tb4b4b4{
Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"dateDivider"Tb4b4b4,
Te6edf3dayKeyTb4b4b4,
Te6edf3keyTff7b72: Ta5d6ff`Ta5d6ffdate-div-Tffd700${Te6edf3dayKeyTffd700}Ta5d6ff-Tffd700${Te6edf3outTb4b4b4.Te6edf3lengthTffd700}Ta5d6ff`Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3prevDayKey Tff7b72= Te6edf3dayKeyTb4b4b4;
Tb4b4b4}
Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3gTb4b4b4, Te6edf3showTimestampTff7b72: Te6edf3showFlagsTb4b4b4[Te6edf3iTb4b4b4] Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────